GraalVMがApple Siliconに対応してた
Introduction
いつの間にかGraalVMがm1 macでも動くようになってました。
これでGraalVM使いたいとき、
わざわざ古いmac引っ張り出してこなくてすみます。
Environment
- MacBook Pro (13-inch, M1, 2020)
- OS : MacOS 11.3.1
- sdkman : 5.13.1
Try
以前の記事と同じように試します。
sdkmanでGraalVMのインストール。
% sdk list java ================================================================================ Available Java Versions for macOS 64bit ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- GraalVM | | 22.1.0.r17 | grl | | 22.1.0.r17-grl | | 22.1.0.r11 | grl | | 22.1.0.r11-grl | | 22.0.0.2.r17 | grl | | 22.0.0.2.r17-grl | | 22.0.0.2.r11 | grl | | 22.0.0.2.r11-grl | | 21.3.2.r17 | grl | | 21.3.2.r17-grl | | 21.3.2.r11 | grl | | 21.3.2.r11-grl | | 21.3.1.r17 | grl | | 21.3.1.r17-grl | | 21.3.2.r11 | nik | | 21.3.2.r11-nik | | 21.3.1.r17 | nik | | 21.3.1.r17-nik | | 21.3.1.r11 | nik | | 21.3.1.r11-nik | | 21.3.0.r17 | nik | | 21.3.0.r17-nik | | 21.3.0.r11 | nik | | 21.3.0.r11-nik | | 21.2 | nik | | 21.2-nik ・・・・・・
% sdk install 22.1.0.r17-grl ・・・
インストールOKです。
% java --version openjdk 17.0.3 2022-04-19 OpenJDK Runtime Environment GraalVM CE 22.1.0 (build 17.0.3+7-jvmci-22.1-b06) OpenJDK 64-Bit Server VM GraalVM CE 22.1.0 (build 17.0.3+7-jvmci-22.1-b06, mixed mode, sharing)
動作確認用のMicronautも最新版をインストール。
% sdk install micronaut 3.4.4 ・・・
mnコマンドで雛形つくります。
% mn create-app micronaut-m1 --build gradle
src/main/java/micronaut/m1にHelloController.javaを作成。
package micronaut.m1; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; @Controller("/hello") public class HelloController { @Get(produces = MediaType.TEXT_PLAIN) public String index() { return "Hello"; } }
とりあえず普通に起動してみます。
% cd micronaut-m1 %./gradlew run > Task :run __ __ _ _ | \/ (_) ___ _ __ ___ _ __ __ _ _ _| |_ | |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __| | | | | | (__| | | (_) | | | | (_| | |_| | |_ |_| |_|_|\___|_| \___/|_| |_|\__,_|\__,_|\__| Micronaut (v3.4.4) 12:03:10.890 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 1211ms. Server Running: http://localhost:8080 <=========----> 75% EXECUTING [24s] > :run
http://localhost:8080/helloにアクセスできればOK。
次はネイティブイメージをつくって動かしてみましょう。
native-imageをインストールします。
% gu install native-image Downloading: Component catalog from www.graalvm.org Processing Component: Native Image Downloading: Component native-image: Native Image from github.com Installing new component: Native Image (org.graalvm.native-image, version 22.1.0) #バージョン確認 %native-image --version GraalVM 22.1.0 Java 17 CE (Java Version 17.0.3+7-jvmci-22.1-b06)
ネイティブコンパイル!
./gradlew nativeCompile > Task :generateResourcesConfigFile ・・・・・・・・ 479.72KB io.netty.handler.codec.http2 603.81KB java.lang.String[] 467.12KB java.util.concurrent 552.61KB java.util.HashMap$Node ... 487 additional packages ... 3012 additional object types (use GraalVM Dashboard to see all) ------------------------------------------------------------------------------------------------------------------------ 8.1s (5.5% of total time) in 36 GCs | Peak RSS: 27.23GB | CPU load: 3.20 ------------------------------------------------------------------------------------------------------------------------ Produced artifacts: /path/your/micronaut-m1/build/native/nativeCompile/micronaut-m1 (executable) /path/your/micronaut-m1/build/native/nativeCompile/micronaut-m1.build_artifacts.txt ======================================================================================================================== BUILD SUCCESSFUL in 2m 33s 5 actionable tasks: 3 executed, 2 up-to-date
作成したネイティブメージを起動します。
起動時間は半分くらい。
% cd /path/your/micronaut-m1 % ./build/native/nativeCompile/micronaut-m1 __ __ _ _ | \/ (_) ___ _ __ ___ _ __ __ _ _ _| |_ | |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __| | | | | | (__| | | (_) | | | | (_| | |_| | |_ |_| |_|_|\___|_| \___/|_| |_|\__,_|\__,_|\__| Micronaut (v3.4.4) 13:04:55.201 [main] INFO io.micronaut.runtime.Micronaut - Startup completed in 559ms. Server Running: http://localhost:8080
Summary
ソフトウェア/SDK/ツール関連の対応で、
m1じゃ動かない。。ということがけっこうありましたが、
少しづつ解消されていってますね。